package com.pan.behavioral.memento;

import com.pan.behavioral.memento.implement.OriginatorFrame;

import javax.swing.*;
import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * 备忘录模式
 * 备忘录模式涉及三个核心
 * Originator（原发器）、Memento（备忘录）和 Caretaker（管理者）
 *
 * 核心思想：
 * 用备忘录Memento负责记录原发器当时的状态
 *
 */
public class MementoApplication {

    public static void main(String[] args) {
//        new MementoApplication().testClosure();
        new OriginatorFrame().display();
    }
    /**
     * 备忘录模式有点类似闭包，同样都是将状态记录下来
     * 但备忘录模式更多侧重于状态本身，
     * 而不像闭包那样包含状态和整个成员
     *
     * 以下是闭包
     */
    public void testClosure(){
        MyClass myClass = new MyClass();
        myClass.onePlus();
        myClass.statusDisplay();
        MyClass closure = myClass.closure();
        myClass.onePlus();
        myClass.onePlus();
        myClass.statusDisplay();
        closure.statusDisplay();
    }
    class MyClass{
        private Integer status = 10;
        public Integer getStatus() {return status;}
        public void setStatus(Integer status) {this.status = status;}
        public void onePlus(){status++;}
        public void statusDisplay(){System.out.println(status);}
        public MyClass closure(){
            Integer currentStatus = this.getStatus();
            class Closure extends MyClass { {super.setStatus(currentStatus);}}
            return new Closure();
        }
    }

}
